#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 该文件主要用于配置文件处理的方法
import os
import configparser
from commons.logger import log


curDir = os.path.join(os.path.dirname(os.path.dirname(__file__)))  # 当前文件所在目录的上一级目录
configPath = os.path.join(curDir, r"config/pytest.ini")  # 拼接要引用的配置文件的完整目录


class Cf:

    def __init__(self):
        self.config = configparser.ConfigParser(allow_no_value=True)
        self.config.read(configPath, encoding='utf-8')

    def get_sections(self):
        """
        读取配置文件下所有的分组,以列表形式返回
        """
        sections_list = self.config.sections()
        return sections_list

    def get_options(self, section):
        """
        读取配置文件某分组下的所有项,以列表形式返回
        section  分组名
        """
        option_list = self.config.options(section)
        return option_list

    def remove_options(self, section, option):
        """
        功能：删除配置文件分组下的项
        :section 分组名
        :option 分组下的项名
        :return 返回删除后的该分组下的项list
        """
        self.config.remove_option(section, option)  # 删除操作
        # with open语法打开文件时,系统会在代码块结束时自动关闭文件,释放资源
        with open(configPath, 'w+', encoding="utf-8") as f:
            self.config.write(f)
            option_list = self.config.options(section)
        return option_list

    def read_config_ini(self, section, option):
        """
        读取配置文件某分组下某个项的值
        :section 分组名
        :option 分组下的项名
        """
        section_lst = self.get_sections()  # 获取到配置文件中所有分组名称
        if section not in section_lst:  # 如果分组type不存在则报错
            assert 0 == 1, "该分组:%s,不存在,请检查配置文件或核对请求参数！" % section
        else:
            op_value = self.config.get(section, option)
            log.info("成功读取配置文件数据:%s分组,%s项下的值" % (section, option))
            return op_value

    def set_config_ini(self, section, option, op_val):
        """
        写入配置文件,已存在该分组则修改该组下某项的值,不存在该分组则追加该分组并写入对应的项及值
        :section 分组名
        :option 分组下的项名
        :op_val 项对应的值
        """
        section_lst = self.get_sections()  # 获取到配置文件中所有分组名称
        if section not in section_lst:  # 如果分组type不存在则插入type分组
            self.config.add_section(section)
            self.config.set(section, option, op_val)  # 给type分组设置值
        else:
            self.config.set(section, option, op_val)  # 否则修改值
        with open(configPath, 'w+', encoding="utf-8") as f:
            self.config.write(f)
        log.info("成功修改或新增配置文件数据:%s分组,%s项下的值为%s" % (section, option, op_val))

if __name__ == '__main__':
    Config = Cf()
    url = Config.read_config_ini("envHost", "ugreen")
    print(url)
